/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.ugc.cnel.manabi.bakenbeans;

import com.icesoft.faces.context.FileResource;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.activation.MimetypesFileTypeMap;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.ugc.cnel.manabi.entidades.Adjuntos;
import org.ugc.cnel.manabi.entidades.Agencia;
import org.ugc.cnel.manabi.entidades.Inspeccion;
import org.ugc.cnel.manabi.entidades.TempUpload;
import org.ugc.cnel.manabi.jpa.AdjuntosJpaController;
import org.ugc.cnel.manabi.jpa.AgenciaJpaController;
import org.ugc.cnel.manabi.jpa.InspeccionJpaController;
import org.ugc.cnel.manabi.jpa.TempUploadJpaController;
import org.ugc.cnel.manabi.jpa.exceptions.PreexistingEntityException;
import org.ugc.cnel.manabi.recursos.Utilidades;

/**
 *
 * @author Admin
 */
public class editInspeccionBakenBean {

    private navegacionBakenBean nav;
    private eventosBakenBean ventana;
    private String idinspeccion;
    private Inspeccion inspeccion_editar;
    private List<Object> adjuntos;
    private final inspeccionBakenBean insbb;
    private final FacesContext facesContext;
    private final InspeccionJpaController inspeccionjpa;
    private final AdjuntosJpaController adjuntosjpa;
    private final TempUploadJpaController tempupload;
    public ArrayList<Adjuntos> adj = new ArrayList<Adjuntos>();

    public String getIdinspeccion() {
        return idinspeccion;
    }

    public void setIdinspeccion(String idinspeccion) {
        this.idinspeccion = idinspeccion;
    }
    private Agencia agen_edit;

    public Agencia getAgen_edit() {
        return agen_edit;
    }

    public void setAgen_edit(Agencia agen_edit) {
        this.agen_edit = agen_edit;
    }
    
    public Inspeccion getInspeccion_editar() {
        //setAgen_edit(new AgenciaJpaController().findAgencia(inspeccion_editar.getIdAgencia()));
        return inspeccion_editar;
    }

    public void setInspeccion_editar(Inspeccion inspeccion_editar) {
        this.inspeccion_editar = inspeccion_editar;
    }

    public List<Object> getAdjuntos() {
        setAdjuntos(getuploadlist());
        return adjuntos;
    }

    public void setAdjuntos(List<Object> adjuntos) {
        this.adjuntos = adjuntos;
    }

    private List<Object> getuploadlist() {
        //Cargar Adjuntos de la Tabla de Adjuntos

        List<Object> rb = new ArrayList<Object>();
        for (Adjuntos adjun : adj) {
            rb.add(new Object[]{new ResourceBean(new FileResource(new File(adjun.getNombre())), adjun.getNombreReal(), null), adjun});
        }
        List<TempUpload> lista_loc = tempupload.getEntityManager().createNamedQuery("TempUpload.findBySessionId").setParameter("sessionId", Utilidades.getSessionID()).getResultList();
        //Cargar Temporales de la tabla TempUpload
        for (TempUpload tempUpload : lista_loc) {
            ResourceBean rbl = new ResourceBean(new FileResource(new File(tempUpload.getRuta())), tempUpload.getRuta(), tempUpload);
            String tipo = new MimetypesFileTypeMap().getContentType(tempUpload.getRuta());
            rb.add(new Object[]{rbl, new Adjuntos(0, tempUpload.getRuta(), tipo, tempUpload.getNombreArchivo())});
        }
        return rb;
    }

    /** Creates a new instance of editInspeccionBakenBean */
    public editInspeccionBakenBean() {
        facesContext = FacesContext.getCurrentInstance();
        insbb = (inspeccionBakenBean) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "inspeccionBakenBean");
        inspeccionjpa = (InspeccionJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "InspeccionJPA");
        adjuntosjpa = (AdjuntosJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "AdjuntosJPA");
        tempupload = (TempUploadJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "tempuploadJPA");
        //adj = new ArrayList<Adjuntos>(insbb.insp_selected.getAdjuntosCollection());
    }

    public navegacionBakenBean getNav() {
        return nav;
    }

    public void setNav(navegacionBakenBean nav) {
        this.nav = nav;
    }

    public eventosBakenBean getVentana() {
        return ventana;
    }

    public void setVentana(eventosBakenBean ventana) {
        this.ventana = ventana;
    }

    public void guardar(ActionEvent evt) {

        try {
            // No guardar nada.... si no esta seleccionado un servicio al cual se va aplicar la inspeccion
            if (inspeccion_editar == null) {
                return;
            }
            Inspeccion inspeccion = this.inspeccion_editar;
            //setter del objeto Inspeccion
            //eliminar los adjuntos de la inspeccion en caso que sean borrados

            for (Object rbn : adjuntos) {
                Object dato[] = (Object[]) rbn;

                ResourceBean rb = (ResourceBean) dato[0];
                Adjuntos act = (Adjuntos) dato[1];

                String tipo = new MimetypesFileTypeMap().getContentType(rb.getFileName());
                if (rb.getTemporal() != null) {
                    Adjuntos adjloc = new Adjuntos(act.getId(), rb.getFileName(), tipo, rb.getTemporal().getNombreArchivo());
                    adjloc.setIdInspeccion(inspeccion);
                    adjuntosjpa.create(adjloc);
                    //Renombrar Archivos
                    File archivo = new File(rb.getFileName());
                    int dotPos = rb.getFileName().lastIndexOf(".");
                    String extension = rb.getFileName().substring(dotPos);

                    String renombrado = archivo.getParent() +"\\"+ adjloc.toString() + extension;
                    boolean pudo = archivo.renameTo(new File(renombrado));
                    if (pudo) {
                        adjloc.setNombre(renombrado);
                        adjuntosjpa.edit(adjloc);
                        tempupload.destroy(rb.getTemporal().getId());
                    } else {
                        throw new Exception("Error al renombrar archivo ....");
                    }
                }
            }
            //actualizar los adjuntos
            Iterator<Adjuntos>it=inspeccionjpa.findInspeccion(inspeccion.getId()).getAdjuntosCollection().iterator();
            adj.clear();
            while (it.hasNext()) {
                Adjuntos adjuntosl = it.next();
                adj.add(adjuntosl);
            }
            inspeccion.setAdjuntosCollection(adj);
            inspeccionjpa.edit(inspeccion);
            ventana.setTipo_ventana(eventosBakenBean.CERRAR);
            ventana.setPopup_header("Inspeccion Guardada Correctamente");
            ventana.setPopup_conten("Se ha guardado la inspeccion N:" + inspeccion.getId() + " para el Sr: " + inspeccion.getIdCliente().getNombre() + " con el Servicio[" + inspeccion.getIdServicio().getCodigoServicio() + "]");
            ventana.setPopup_visible(true);
            //Actualizar la lista de la tabla de edicion....
            insbb.getLista();
            Logger.getLogger(inspeccionBakenBean.class.getName()).log(Level.INFO, "Se ha guardado la inspeccion N:" + inspeccion.getId() + " para el Sr: " + inspeccion.getIdCliente().getNombre() + " con el Servicio[" + inspeccion.getIdServicio().getCodigoServicio() + "]");
            //limpiar_formulario();

        } catch (PreexistingEntityException ex) {
            ventana.setTipo_ventana(eventosBakenBean.CERRAR);
            ventana.setPopup_header("Error");
            ventana.setPopup_conten(ex.getMessage());
            ventana.setPopup_visible(true);
            Logger.getLogger(inspeccionBakenBean.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            ventana.setTipo_ventana(eventosBakenBean.CERRAR);
            ventana.setPopup_header("Error");
            ventana.setPopup_conten(ex.getMessage());
            ventana.setPopup_visible(true);
            Logger.getLogger(inspeccionBakenBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void cancelar(ActionEvent evt) {
        //Actualizar la lista de los que cambiarons
        for (int i = 0; i < this.adjuntos.size(); i++) {
            this.adjuntos.remove(i);
        }
        for (int i = 0; i < this.adj.size(); i++) {
            this.adj.remove(i);
        }
        this.
        insbb.refrescar_lista();
        getNav().setPagina_contenido("inspecciones/editInspeccion.jspx");

    }

    public void eliminar_adjunto(ActionEvent evt) {
        Object obj = evt.getComponent().getAttributes().get("tupla_archivo");
        Object dat[] = (Object[]) obj;
        ResourceBean dato = (ResourceBean) dat[0];
        Adjuntos adjs = (Adjuntos) dat[1];
        try {
            if (adjs.getId().intValue() == 0) {
                //Eliminar el Dato en el tabla temporal de la lista
                File archivo = new File(dato.getTemporal().getRuta());
                archivo.delete();
                tempupload.destroy(dato.getTemporal().getId());
            }
            else{
                File archivo = new File(adjs.getNombre());
                archivo.delete();
                adjuntosjpa.destroy(adjs.getId());
            }
            this.adj.remove(adjs);
            this.adjuntos.remove(obj);
        } catch (Exception e) {
            Logger.getLogger(inspeccionBakenBean.class.getName()).log(Level.SEVERE, "OEEEEEEEEEEEEEEEE", e);
        }
    }
}
